# LEDAgent (Delphi 13) 에이전트 자동화 구현 계획

수동 테스트 용도로 작성되었던 `LEDAgent` 프로그램을 데이터베이스와 연동하여 자율적으로 동작하는 진정한 **'하드웨어 제어 에이전트'**로 업그레이드하기 위한 구현 계획입니다.

## ⚠️ User Review Required (검토 및 확인 필요)

본격적인 코드 수정에 앞서 아래 사항들을 확인해 주시면 정확한 구현이 가능합니다.

> [!IMPORTANT]
> 1. **데이터베이스 접속 정보**: `U_DM.pas`의 `fdConnEtc`를 사용하여 파이썬 서버와 동일한 DB(`mmcl_db`, `root`, `password`, `localhost:3306`)에 접속하도록 소스 코드(`uMain.pas`) 내에 하드코딩해도 괜찮을까요? (혹은 외부 INI 파일 등으로 관리해야 하는지 확인 부탁드립니다.)
> 2. **제어 대상 경광등 IP**: 현재 `uMain.dfm` 화면에 있는 텍스트박스(IP/Port)의 값을 기준으로 DLL 통신을 합니다. 에이전트가 1대의 PC에서 1대의 Q-Light 장비만 전담해서 제어하는 1:1 매핑 구조가 맞는지요?
> 3. **타이머 주기**: DB를 조회하는 주기는 **1초(1000ms)**로 설정할 계획입니다. 적절한지 피드백 부탁드립니다.

## 🛠️ Proposed Changes (제안하는 코드 변경 사항)

### 1. `uMain.pas` (비즈니스 로직 수정)
* **모듈 추가**: `uses` 절에 `U_DM`, `uLogManagerThread`, `FireDAC.Stan.Param` 등을 추가합니다.
* **초기화 및 종료 로직**:
  * `FormCreate`: 
    * `InitLogger`를 호출하여 로그 쓰레드를 시작합니다. (로그 폴더 예: `C:\LEDAgentLogs\`)
    * `U_DM.DM.fdConnEtc` 객체에 연결 정보를 주입하고 DB에 연결합니다.
    * 폴링용 `TTimer`를 동적으로 생성하고 가동(Interval 1000)합니다.
  * `FormDestroy`: 
    * `TTimer` 중지, DB 연결 해제, `StopLogger`를 호출하여 안전하게 종료합니다.
* **DB 폴링 타이머(Timer) 이벤트 (핵심 로직)**:
  * `sensor_info` 테이블을 1초마다 조회하여 `target_status`와 `value_status`가 다른 레코드를 찾습니다.
    ```sql
    SELECT sensor_no, target_ch1_statusID, target_ch2_statusID, target_ch3_statusID 
    FROM sensor_info 
    WHERE target_ch1_statusID != value_ch1_statusID 
       OR target_ch2_statusID != value_ch2_statusID 
       OR target_ch3_statusID != value_ch3_statusID
    ```
  * 변경 대상이 발견되면:
    1. 화면의 IP/Port 및 0,1,2 타겟값을 기반으로 `c_pIdata` 배열을 재구성합니다.
    2. `Tcp_Qu_RW` DLL 함수를 호출하여 실제 하드웨어 경광등 색상을 변경합니다.
    3. 전송에 성공하면 `UPDATE sensor_info SET value_... = target_...` 쿼리를 실행하여 DB 상태를 갱신(Handshake 완료)합니다.
    4. 이 모든 과정을 `AddLog_Thread` (파일 로그)와 `LogMessage` (화면 UI 리스트박스)에 기록합니다.

### 2. `U_DM.pas` 및 `LEDAgent.dpr` (유지)
* 제공된 `U_DM`과 `uLogManagerThread`는 변경 없이 그대로 사용하며, `dpr` 파일에 해당 유닛들이 누락되었다면 추가로 등록합니다.

## ✅ Verification Plan (검증 계획)
* 델파이 빌드(`Shift+F9`) 시 에러가 없는지 확인 안내.
* 파이썬 API 서버로 POST 호출 시, 델파이 프로그램 화면에 "DB에서 제어 명령 수신" 및 "하드웨어 변경 완료" 로그가 실시간으로 찍히고 504 Timeout 없이 200 OK가 떨어지는지 연동 테스트 안내.
